linux grep文件过滤与分割命令 您所在的位置:网站首页 linux 文本分割 linux grep文件过滤与分割命令

linux grep文件过滤与分割命令

2023-10-06 13:49| 来源: 网络整理| 查看: 265

linux grep文件过滤与分割命令

文章目录 linux grep文件过滤与分割命令1、grep命令选项 grep命令常见用法grep递归搜索文件 2、split命令选项实例 3、look命令语法选项参数 4、printf命令语法参数实例 5、dump命令语法选项参数实例

1、grep命令

文件过滤分割与合并

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

选项 -a 不要忽略二进制数据。 -A 除了显示符合范本样式的那一行之外,并显示该行之后的内容。 -b 在显示符合范本样式的那一行之外,并显示该行之前的内容。 -c 计算符合范本样式的列数。 -C或- 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。 -d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 -e 指定字符串作为查找文件内容的范本样式。 -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 -f 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。 -F 将范本样式视为固定字符串的列表。 -G 将范本样式视为普通的表示法来使用。 -h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。 -H 在显示符合范本样式的那一列之前,标示该列的文件名称。 -i 忽略字符大小写的差别。 -l 列出文件内容符合指定的范本样式的文件名称。 -L 列出文件内容不符合指定的范本样式的文件名称。 -n 在显示符合范本样式的那一列之前,标示出该列的编号。 -q 不显示任何信息。 -R/-r 此参数的效果和指定“-d recurse”参数相同。 -s 不显示错误信息。 -v 反转查找。 -w 只显示全字符合的列。 -x 只显示全列符合的列。 -y 此参数效果跟“-i”相同。 -o 只输出文件中匹配到的部分。 grep命令常见用法

在文件中搜索一个单词,命令会返回一个包含**“match_pattern”**的文本行:

grep match_pattern file_name grep "match_pattern" file_name

在多个文件中查找:

grep "match_pattern" file_1 file_2 file_3 ...

输出除之外的所有行 -v 选项:

grep -v "match_pattern" file_name

标记匹配颜色 –color=auto 选项:

grep "match_pattern" file_name --color=auto

使用正则表达式 -E 选项:

grep -E "[1-9]+" 或 egrep "[1-9]+"

只输出文件中匹配到的部分 -o 选项:

echo this is a test line. | grep -o -E "[a-z]+\." line. echo this is a test line. | egrep -o "[a-z]+\." line.

统计文件或者文本中包含匹配字符串的行数 -c 选项:

grep -c "text" file_name

输出包含匹配字符串的行数 -n 选项:

grep "text" -n file_name 或 cat file_name | grep "text" -n #多个文件 grep "text" -n file_1 file_2

打印样式匹配所位于的字符或字节偏移:

echo gun is not unix | grep -b -o "not" 7:not #一行中字符串的字符便宜是从该行的第一个字符开始计算,起始值为0。选项 -b -o 一般总是配合使用。

搜索多个文件并查找匹配文本在哪些文件中:

grep -l "text" file1 file2 file3... grep递归搜索文件

在多级目录中对文本进行递归搜索:

grep "text" . -r -n # .表示当前目录。

忽略匹配样式中的字符大小写:

echo "hello world" | grep -i "HELLO" hello

选项 -e 制动多个匹配样式:

echo this is a text line | grep -e "is" -e "line" -o is line #也可以使用-f选项来匹配多个样式,在样式文件中逐行写出需要匹配的字符。 cat patfile aaa bbb echo aaa bbb ccc ddd eee | grep -f patfile -o

在grep搜索结果中包括或者排除指定文件:

#只在目录中所有的.php和.html文件中递归搜索字符"main()" grep "main()" . -r --include *.{php,html} #在搜索结果中排除所有README文件 grep "main()" . -r --exclude "README" #在搜索结果中排除filelist文件列表里的文件 grep "main()" . -r --exclude-from filelist

使用0值字节后缀的grep与xargs:

#测试文件: echo "aaa" > file1 echo "bbb" > file2 echo "aaa" > file3 grep "aaa" file* -lZ | xargs -0 rm #执行后会删除file1和file3,grep输出用-Z选项来指定以0值字节作为终结符文件名(\0),xargs -0 读取输入并用0值字节终结符分隔文件名,然后删除匹配文件,-Z通常和-l结合使用。

grep静默输出:

grep -q "test" filename #不会输出任何信息,如果命令运行成功返回0,失败则返回非0值。一般用于条件测试。

打印出匹配文本之前或者之后的行:

#显示匹配某个结果之后的3行,使用 -A 选项: seq 10 | grep "5" -A 3 5 6 7 8 #显示匹配某个结果之前的3行,使用 -B 选项: seq 10 | grep "5" -B 3 2 3 4 5 #显示匹配某个结果的前三行和后三行,使用 -C 选项: seq 10 | grep "5" -C 3 2 3 4 5 6 7 8 #如果匹配结果有多个,会用“--”作为各匹配结果之间的分隔符: echo -e "a\nb\nc\na\nb\nc" | grep a -A 1 a b -- a b 2、split命令

文件过滤分割与合并

split命令可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志等。

选项 -b:值为每一输出档案的大小,单位为 byte。 -C:每一输出档中,单行的最大 byte 数。 -d:使用数字作为后缀。 -l:值为每一输出档的列数大小。 实例

生成一个大小为100KB的测试文件:

[root@localhost split]# dd if=/dev/zero bs=100k count=1 of=date.file 1+0 records in 1+0 records out 102400 bytes (102 kB) copied, 0.00043 seconds, 238 MB/s

使用split命令将上面创建的date.file文件分割成大小为10KB的小文件:

[root@localhost split]# split -b 10k date.file [root@localhost split]# ls date.file xaa xab xac xad xae xaf xag xah xai xaj

文件被分割成多个带有字母的后缀文件,如果想用数字后缀可使用-d参数,同时可以使用-a length来指定后缀的长度:

[root@localhost split]# split -b 10k date.file -d -a 3 [root@localhost split]# ls date.file x000 x001 x002 x003 x004 x005 x006 x007 x008 x009

为分割后的文件指定文件名的前缀:

[root@localhost split]# split -b 10k date.file -d -a 3 split_file [root@localhost split]# ls date.file split_file000 split_file001 split_file002 split_file003 split_file004 split_file005 split_file006 split_file007 split_file008 split_file009

使用-l选项根据文件的行数来分割文件,例如把文件分割成每个包含10行的小文件:

split -l 10 date.file 3、look命令

文件过滤分割与合并

look命令用于显示文件中以指定字符串开头的任意行。

语法 look(选项)(参数) 选项 -a:使用另一个字典文件web2,该文件也位于/usr/dict目录下; -d:只对比英文字母和数字,其余一概忽略不予比对; -f:忽略字符大小写差别; -t:设置字尾字符串。 参数 字符串:指定要查找的字符串;文件:指定要查找的目标文件。 4、printf命令

文件过滤分割与合并

printf命令格式化并输出结果到标准输出。

语法 printf(选项)(参数) --help:在线帮助; --version:显示版本信息。 参数 输出格式:指定数据输出时的格式;输出字符串:指定要输出的数据。

格式替代符

%b 相对应的参数被视为含有要被处理的转义序列之字符串。%c ASCII字符。显示相对应参数的第一个字符%d, %i 十进制整数%e, %E, %f 浮点格式%g %e或%f转换,看哪一个较短,则删除结尾的零%G %E或%f转换,看哪一个较短,则删除结尾的零%o 不带正负号的八进制值%s 字符串%u 不带正负号的十进制值%x 不带正负号的十六进制值,使用a至f表示10至15%X 不带正负号的十六进制值,使用A至F表示10至15%% 字面意义的%

转义序列

\a 警告字符,通常为ASCII的BEL字符\b 后退\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略\f 换页(formfeed)\n 换行\r 回车(Carriage return)\t 水平制表符\v 垂直制表符\ 一个字面上的反斜杠字符\ddd 表示1到3位数八进制值的字符,仅在格式字符串中有效\0ddd 表示1到3位的八进制值字符 实例 printf "hello world" #!/bin/bash printf "%-5s %-10s %-4s\n" NO Name Mark printf "%-5s %-10s %-4.2f\n" 01 Tom 90.3456 printf "%-5s %-10s %-4.2f\n" 02 Jack 89.2345 printf "%-5s %-10s %-4.2f\n" 03 Jeff 98.4323 %-5s 格式为左对齐且宽度为5的字符串代替(-表示左对齐),不使用则是又对齐。%-4.2f 格式为左对齐宽度为4,保留两位小数。 5、dump命令

文件备份和恢复

dump命令用于备份ext2或者ext3文件系统。可将目录或整个文件系统备份至指定的设备,或备份成一个大文件。

语法 dump(选项)(参数) 选项 -0123456789:备份的层级; -b:指定区块的大小,单位为KB; -B:指定备份卷册的区块数目; -c:修改备份磁带预设的密度与容量; -d:设置磁带的密度。单位为BPI; -f:指定备份设备; -h:当备份层级等于或大于指定的层级时,将不备份用户标示为“nodump”的文件; -n:当备份工作需要管理员介入时,向所有“operator”群组中的使用者发出通知; -s:备份磁带的长度,单位为英尺; -T:指定备份的时间与日期; -u:备份完毕后,在/etc/dumpdates中记录备份的文件系统、层级、日期与时间等; -w:与-W类似,但仅显示需要备份的文件; -W:显示需要备份的文件及其最后一次备份的层级、时间与日期。 参数

备份源:指定要备份的文件、目录或者文件系统。

实例

将/home目录所有内容备份到/tmp/homeback.bak文件中,备份层级为0并在/etc/dumpdates中记录相关信息:

‍dump -0u -f /tmp/homeback.bak /home

将/home目录所有内容备份到/tmp/homeback.bak文件中,备份层级为1(只备份上次使用层次0备份后发生过改变的数据)并在/etc/dumpdates中记录相关信息:

dump -1u -f /tmp/homeback.bak /home

通过dump命令的备份层级,可实现完整+增量备份、完整+差异备份,在配合crontab可以实现无人值守备份。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有